package com.six.backend.dao;

import com.six.backend.pojo.LoginLog;
import com.six.backend.pojo.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
import java.util.Map;

/**
 * @author skyler
 */
@Mapper
public interface UserDao {
    /**
     * 查询用户的信息
     * @param user 存储了输入的用户账号和用户密码
     * @return 返回了完整的用户信息
     */
    User selectUserByAccount(User user);

    /**
     * 查询用户的信息
     * @param account 用户的账号
     * @return 用户的全部信息
     */
    User selectUserById(String account);

    /**
     * 查询全部用户信息
     * @return User
     */
    List<User> selectAllUsers();

    /**
     * 插入用户
     * @param map {
     *            account: 用户账号,
     *            name: 用户姓名,
     *            password: 用户密码,
     *            status: 用户状态,
     *            createTime: 创建时间,
     *            phone: 手机号码,
     *            email: 邮箱,
     *            roleName: 角色名称
     * }
     * @return Integer
     */
    Integer insertUser(Map map);

    /**
     * 为用户设置角色
     * @param map {String account 用户账号,List<String> roleName 角色名称}
     * @return Integer
     */
    Integer insertUserRole(Map map);

    /**
     *模糊查询用户
     * @param map {account: 用户账号, status: 账号状态, name: 用户名称}
     * @return
     */
    List<User> selectUser(Map map);

    /**
     * 删除用户
     * @param account 用户账号
     * @return
     */
    Integer deleteUser(String account);

    /**
     * 删除用户角色关系
     * @param account 用户账号
     * @return Integer 删除的行数
     */
    Integer deleteUserRole(String account);

    /**
     * 存储登录日志
     * @param account 用户账号
     * @param ipAddr ip地址
     * @param format 当前时间
     */
    void insertLoginLog(String account, String ipAddr, String format);
    /**
     * 编辑用户
     * @param map
     * @return
     */
    Integer updateUser(Map map);

    /**
     * 修改用户的角色
     * @param map
     * @return
     */
    Integer updateUserRole(Map map);

    /**
     * 查询用户角色
     * @param account 用户账号
     * @return
     */
    User selectUserRole(String account);

    /**
     * 改变用户状态
     * @param user {account: 账号,status: 改变的状态}
     * @return Integer
     */
    Integer updateStatus(User user);


    /**
     * 修改密码
     * @param map {account: 账号, password: 密码}
     * @return
     */
    Integer updatePassword(Map map);

    /**
     * 查询查询登录日志的接口
     * @param map 里面为用户的账号
     * @return 登录日志的集合
     */
    List<LoginLog> selectLoginLog(Map map);
}
